WEB3 Day4—Solidity基础[part3]

WEB3 Day4—Solidity基础[part3]

智能合约部署 Smart Contracts Deploying

Sepolia TestNet deploying

我们可以通过进入部署选项卡,从本地虚拟环境(Remix VM)切换到注入的提供者 - MetaMask 来开始部署过程。这一操作将允许Remix发送请求并与您的MetaMask账户进行交互。

img

随后系统会提示你去选择一个账号。 在你成功连接到remix之后,你会看到账号已经成功链接到并且正在使用sepolia网络的信息。

img

注意,需要你的测试网络里面必须有足够的 sepolia ETH,如果没有需要从水龙头获取,免费的水龙头我这边会集中收集一次,后续可点击这篇文章:【TODO 挖个坑】;

暂时可以去这里faucet, 但是还是需要主账户里面要有ether。

随后,MetaMask就会要求你在测试网站上签署发送:

img

交易执行之后,合约地址会将交易详情一同显示在已部署的合约列表下面。这就是Eherscan上部署交易的显示方式。

img

合约交互 Contract interaction

合约部署完成以后,我们可以与之交互并更新区块链。例如,如果想存储一个数字,可以通过点击store按钮实现;MetaMask会要求再次确认交易。然后更行您设置的数字。这些交易都可以通过部署地址在etherscan上面查询查看。

Zksync部署

由于以太坊主网合约部署成本比较高昂,所以RollUp和Layer2网络等扩容解决方案更佳,需要掌握部署在Zksync的流程。

首先需要Zksync的测试网基金以及zkSync的跨链桥

可参照之前的笔记 WEB3 Day2 —— BlockChain Basic 2

然后步骤和上面主网的测试网络部署相似,只不过需要跨链

  • 连接钱包
  • 需要将Sepolia ETH跨链到zkSync,Zksync Bridge地址
    • 连接钱包,保证网络在sepolia
    • 从sepolia测试网发送eth到zksync

image-20250701110433474

image-20250701110602186

  • 有测试基金以后,需要将remixIDE 下载zksync的插件
    image-20250701111034094

  • ⚠️ zkSync部署版本要求 ‘0.8.24’,并且合约*.sol文件必须放在一个contracts文件夹中,不然Zksyn插件的deploy标签页可能会显示空白

  • 编译——>连接钱包——> 部署

    img

合约之间如何相互部署以及交互

通过import进行导入另一个合约

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.18;

import "./SimpleStorage.sol";

contract StorageFacotory {

    SimpleStorage public simpleStorage;


    function createSimpleStorageContract() public  {
        simpleStorage = new SimpleStorage();
    }
}

如果导入文件有多个合约,一般import最好声明具体的名称,可以不用导入该文件的所有合约

import {SimpleStorage, SimpleStorage2} from "./SimpleStorage.sol";

调用另外一个合约的ABI[application binary interface]

可以创造一个SimpleStorage的数组来存储所有创建的simpleStorage的地址,然后通过地址去调用特定的simplestorage的函数


pragma solidity ^0.8.19;

import {SimpleStorage} from "./SimpleStorage.sol";
contract StorageFacotory {

    SimpleStorage[] public listOfSimpleStorage;


    // 创建需要的SimpleStorage
    function createSimpleStorageContract() public  {
        SimpleStorage simpleStorage = new SimpleStorage();
        listOfSimpleStorage.push(simpleStorage);
    }

    // 调用simpleStorage的store函数
    function sfStore(uint256 _index, uint256 myFavoriteNumber) public{
        listOfSimpleStorage[_index].store(myFavoriteNumber);
    }

    // 调用simpleStorage里面的recive函数
    function sfRecive(uint256 _index) public view returns (uint256) {
        return listOfSimpleStorage[_index].recive();
    }

}
image-20250701154154011

继承和重写

创建继承自 SimpleStorage.sol 的新合约 AddFiveStorage.sol,并通过重写函数实现功能扩展。

SimpleStorage.sol代码

  • virtual 表示原函数可以被继承
function store(uint256 favoriteNumber) public virtual  {// 存储
     myFavoriteNumber = favoriteNumber;
 }

AddFiveStorage.sol代码

// SPDX-License-Identifier:MIT

pragma solidity ^0.8.18;

import {SimpleStorage} from "./SimpleStorage.sol";

contract AddFiveStorage is SimpleStorage {


    // 需要override关键字 原函数需要加上virtual函数
   function store(uint256 favoriteNumber) public override {// 存储
        myFavoriteNumber = favoriteNumber + 5;
    }
}
  • is 表示继承
  • override 关键字表示重写